<?php
/**
 * Controle de Artefato
 * @filesource  06/04/2011
 * @author      Estrada Virtual <http://estradavirtual.com.br>
 * @copyright   Copyright <2011> Estrada Virtual
 * @package     <<application>>
 * @subpackage  <<application>>.application.controllers
 * @version     $Id$
 */
class ArtefatoController extends App_Controller_Action
{
    public function listarAction()
    {
        $fk_cliente = $this->_getParam('fk_cliente');
        $origem = $this->_getParam('origem');

        if (!$fk_cliente) {
            return false;
        }
        $url = array('module' => 'corporativo', 'controller' => 'artefato', 'action' => 'upload', 'fk_cliente' => $fk_cliente);

        $sfiltro = 'fk_cliente = ' . $fk_cliente;

        // Projeto
        $fk_projeto = $this->_getParam('fk_projeto');
        if ($fk_projeto) {
            $sfiltro .= ' AND fk_projeto = ' . $fk_projeto;
            $url['fk_projeto'] = $fk_projeto;
        } else {
            $sfiltro .= ' AND fk_projeto is null';
        }

        // Serviço
        $fk_servico = $this->_getParam('fk_servico');
        if ($fk_servico) {
            $sfiltro .= ' AND fk_servico = ' . $fk_servico;
            $url['fk_servico'] = $fk_servico;
        } else {
            $sfiltro .= ' AND fk_servico is null';
        }

        // Tarefa
        $fk_tarefa = $this->_getParam('fk_tarefa');
        if ($fk_tarefa) {
            $sfiltro .= ' AND fk_tarefa = ' . $fk_tarefa;
            $url['fk_tarefa'] = $fk_tarefa;
        } else {
            $sfiltro .= ' AND fk_tarefa is null';
        }

        $usuario = new Model_Usuario();
        $rowSetUsuarios = $usuario->fetchAll();
        $aUsuarios = array();
        foreach ($rowSetUsuarios as $rowUsuario) {
            $aUsuarios[$rowUsuario->id_usuario] = $rowUsuario->st_nome;
        }
        $this->view->aUsuarios = $aUsuarios;

        $artefato = new Model_Artefato();
        $this->view->rowSetArtefato = $artefato->fetchAll($sfiltro, 'st_nome');
        $this->view->url = $url;
        $this->view->origem = $origem;
    }

    public function uploadAction()
    {
        $this->_helper->layout()->disableLayout();
        $fk_tarefa = $this->_getParam('fk_tarefa');

        $fk_cliente = $this->_getParam('fk_cliente');
        if (!$fk_cliente) {
            return false;
        }

        if ($this->getRequest()->isPost()) {
            $this->_helper->viewRenderer->setNoRender(true);

            $artefato = new Model_Artefato();
            $rowArtefato = $artefato->createRow($this->_getAllParams());
            $rowArtefato->fk_usuario = Zend_Auth::getInstance()->getIdentity()->id_usuario;
            $rowArtefato->dt_upload  = date('Y-m-d H:i:s');

            if (!empty($_FILES)) {
                $path = $artefato->upload($rowArtefato, $_FILES['file_artefato']);
                $rowArtefato->st_path = $path;
                $rowArtefato->st_type = $_FILES['file_artefato']['type'];
            }
            if (empty($rowArtefato->fk_projeto)) {
                $rowArtefato->fk_projeto = null;
            }
            if (empty($rowArtefato->fk_tarefa)) {
                $rowArtefato->fk_tarefa = null;
            }
            $rowArtefato->save();
            $url = 'corporativo/cliente/visualizar/id/' . $fk_cliente;
            if ($fk_projeto = $this->_getParam('fk_projeto')) {
                $url = 'projeto/projeto/visualizar/id/' . $fk_projeto;
            }

            if ($fk_tarefa = $this->_getParam('fk_tarefa')) {
                $url = 'tarefa/tarefa/visualizar/id/' . $fk_tarefa;
            }

            if ($fk_servico = $this->_getParam('fk_servico')) {
                $url = 'servico/servico/visualizar/id/' . $fk_servico;
            }


            $this->_redirect($url);
        }

        $cliente = new Model_Cliente();
        $rowCliente  = $cliente->find($fk_cliente)->current();
        $this->view->fk_cliente  = $rowCliente->id_cliente;
        $this->view->clienteNome = $rowCliente->st_nome;
        unset($rowCliente);

        if ($fk_projeto = $this->_getParam('fk_projeto')) {
            $projeto = new Model_Projeto();
            $rowProjeto  = $projeto->find($fk_projeto)->current();

            // @FIXME Ver como tratar
            if ($rowProjeto->fk_cliente != $fk_cliente) {
                echo 'Projeto não relacionado ao cliente'; die;
            }
            $fk_projeto = $rowProjeto->id_projeto;
            unset($rowProjeto);
        } else {
            $fk_projeto  = null;
        }

        if ($fk_servico = $this->_getParam('fk_servico')) {
            $servico = new Model_Servico();
            $rowServico  = $servico->find($fk_servico)->current();

            // @FIXME Ver como tratar
            if ($rowServico->fk_cliente != $fk_cliente) {
                echo 'Projeto não relacionado ao cliente'; die;
            }
            $fk_servico = $rowServico->id_servico;
            unset($rowServico);
        } else {
            $fk_servico  = null;
        }

        $this->view->fk_servico  = $fk_servico;
        $this->view->fk_projeto  = $fk_projeto;
        $this->view->fk_tarefa   = $fk_tarefa;
        $this->view->usuarioNome = Zend_Auth::getInstance()->getIdentity()->st_nome;
    }

    public function downloadAction()
    {
        $this->_helper->layout()->disableLayout();
        $this->_helper->viewRenderer->setNoRender(true);
        if (!$idArtefato = $this->_getParam('id', false)) {
            return;
        }

        $artefato = new Model_Artefato();
        if (!$rowArtefato = $artefato->find($idArtefato)->current()) {
            $this->_redirect('index');
        }
        //$pathFile = $artefato->getPathFile($rowArtefato);
        $pathFile = $rowArtefato->st_path;

        if (file_exists($pathFile)) {
            $this->_forceDownload($pathFile, $rowArtefato->st_type);
        }
    }

    private function _forceDownload($file, $type)
    {
        header('Content-Description: File Transfer');
        header('Content-Type: ' . $type);
        header('Content-Disposition: attachment; filename=' . basename($file));
        header('Content-Transfer-Encoding: binary');
        header('Expires: 0');
        header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
        header('Pragma: public');
        header('Content-Length: ' . filesize($file));
        ob_clean();
        flush();
        readfile($file);
        exit;
    }

    public function excluirAction()
    {
        $id = $this->_getParam('id');
        $origem = $this->_getParam('origem');
        $modelArtefato = new Model_Artefato();
        $row = $modelArtefato->fetchRow(array('id_artefato = ?' => $id));
        $row->delete();
        //$this->_redirect($origem);
    }
}
